package cn.dengta.webapp.trade.model;

import cn.dengta.common.model.ValueProxy;
import cn.dengta.context.model.LabelI18nProxy;
import lombok.Getter;

import static cn.dengta.context.model.TradeEnumI18nKey.*;

/**
 * 币种信息
 * 【注意】此处的枚举名称定义必须要和 PayPay 文档中的命名保持一致：https://developer.paypal.com/reference/currency-codes/
 * Google Pay 和 Apple Pay 如果有币种选择，也要考虑一致性问题
 */
@Getter
public enum Currency implements LabelI18nProxy<Currency, String> {
	/** 人民币 */
	RMB(CURRENCY_RMB),
	/** 美元 */
	USD(CURRENCY_USD),
	/** 越盾 */
	VND(CURRENCY_VND),
	/** 台币 */
	TWD(CURRENCY_TWD),
	/** 韩元 */
	KRW(CURRENCY_KRW),
	/** 日元 */
	JPY(CURRENCY_JPY),
	/** 印度（卢比） */
	INR(CURRENCY_INR),
	/** 马来（令吉） */
	MYR(CURRENCY_MYR),
	/** 泰国（泰铢） */
	THB(CURRENCY_THB),
	/** 印尼（卢比） */
	IDR(CURRENCY_IDR),
	/** 菲律宾（比索） */
	PHP(CURRENCY_PHP),
	MAD(CURRENCY_MAD),
	TRY(CURRENCY_TRY),
	AED(CURRENCY_AED),
	SAR(CURRENCY_SAR),
	CAD(CURRENCY_CAD),
	GBP(CURRENCY_GBP),
	EUR(CURRENCY_EUR),
	BRL(CURRENCY_BRL),
	MXN(CURRENCY_MXN),
	PEN(CURRENCY_PEN),
	ARS(CURRENCY_ARS),
	;

	final ValueProxy<Currency, String> proxy;

	// 构造函数，枚举类型只能为私有
	Currency(String label) {
		this.proxy = new ValueProxy<>(this, name(), label);
	}

	public static final Currency[] CACHE = values();

	public static Currency of(String value) {
		return USD.getValueOf(value);
	}

}
